package com.jinhongone.pattern.creater.factory.simple;


/*
* 简单工厂模式：
*   使用工厂类将coffeeStore和coffee解耦，但会造成coffeeStore和coffee与工厂类产生依赖,并且以后还是要修改工厂类中的代码，没有遵守开闭原则。
*   作用：工厂类作为中间类，仅修改工厂类代码，就可以对多个调用方实现扩展（多个类调用工厂类），该模式能做到减少代码改动量，扩展调用类的作用。
* 注意：简单工厂分为实例和静态，区别在于是否在方法上添加static关键字
* */
public class SimpleFactory {

    //实例工厂
    /*public  Coffee createCoffee(String type) {
        //CoffeeStore 依赖于 Coffee
        Coffee coffee;
        switch (type) {
            case "american":
                coffee = new AmericanCoffee();
                break;
            case "latte":
                coffee = new LatteCoffee();
                break;
            default:
                throw new RuntimeException("本店没有该类coffee");
        }
        return coffee;
    }*/
    //静态工厂
    public static Coffee createCoffee(String type) {
        //CoffeeStore 依赖于 Coffee
        Coffee coffee;
        switch (type) {
            case "american":
                coffee = new AmericanCoffee();
                break;
            case "latte":
                coffee = new LatteCoffee();
                break;
            default:
                throw new RuntimeException("本店没有该类coffee");
        }
        return coffee;
    }
}
